package day19.inner;
//测试 匿名内部类--匿名对象+局部内部类
//好处: 优化程序的继承结构
public class Test1 {
    public static void main(String[] args) {
//TODO 1, 直接创建接口对象--这个匿名对象没名字,一次只能执行一个任务
        new A(){
 //匿名内部类--直接创建接口的对象,并在匿名内部类里重写抽象方法
            @Override
            public void save() {
                System.out.println("数据增加成功");
            }
        }.save();//调用指定的方法

        //jdk1.8提供的lambda表达式
        A a = ()->{ System.out.println("数据增加成功");} ;
        a.save();

//TODO 2, 直接创建接口对象--b是这个对象的名字,可以用b执行好几个任务
        B b = new B(){
 //匿名内部类--直接创建接口的对象,并在匿名内部类里重写抽象方法
            @Override
            public void save() {
                System.out.println("save");
            }
            @Override
            public void delete() {
                System.out.println("delete");
            }
        };
        b.save();
        b.delete();
//TODO 3, 直接创建抽象类对象--需要重写所有抽象方法,至于普通方法想改才重写
        new C(){
            @Override
            public void save(){
                System.out.println("save..");
            }
        }.save();
    }
}
abstract class C{
    //抽象类里的方法可以是普通的或者是抽象的
    public abstract void save();
    public void get(){
        System.out.println("get");
    }
}
interface B{
    void save();//public abstract void save();
    void delete();
}
interface A{
    void save();//public abstract void save();
}
////2, 使用接口
//class B implements A{
//    //3,实现了接口后,需要重写接口里的 所有抽象方法,否则是一个抽象类
//    @Override
//    public void save() {
//        System.out.println("save");
//    }
//}


